home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
www
/
ludzie
/
txf
/
progs
/
timemaster.lha
/
TimeMaster
/
TimeMaster.doc
< prev
Wrap
Text File
|
1996-11-14
|
10KB
|
229 lines
Time Master v1.0
Public Domain 1996
Spotkaîeô sië juû zapewne z programami, których zadaniem jest
"siedzenie" w pamiëci i wykonywanie w tym czasie uûytecznych zadaï. Czy
byî to program pakujâcy w tle wszystkie pliki za pomocâ algorytmu
ByteRun1, czy obsîugujâcy zapis danych na magnetofonie MK 232P Automatic
podîâczonym do zîâcza IDE, moûe nawet sterujâcy jakimô urzâdzeniem
zewnëtrznym (np. pralka). Niestety, niektóre z posiadanych przez Ciebie
programów tego typu to tzw. Demo Versions, charakteryzujâce sië
okreôlonym czasem przydatnoôci (zwykle okoîo 15 minut), po którym
znikajâ z listy tasków Execa (ewentualnie wyôwietlajâ jakieô
niesîychanie interesujâce informacje). Jeûeli tak jest, moûesz
potrzebowaê tego programu. Oczywiôcie problem zwiâzany z czasowym
dziaîaniem tych kawaîków softu moûna rozwiâzaê w inny sposób, np.
poprzez skrypt uruchamiajâcy dany program co 15 minut, jednakûe nie
zapewnia to ich pewnego dziaîania (pralka musi byê sterowana w sposób
ciâgîy). Ten program robi to inaczej - "troszkë" przedîuûa "czas próby"
(sto trzydzieôci lat z hakiem).
Ostrzegam jednak, ûe posîugiwanie sië tym programem moûe byê nieco
trudne, wymaga pewnej wiedzy o systemie operacyjnym Amigi oraz moûe
prowadziê do frustracji autorów rzeczonych programów (ja bym sië
zdenerwowaî).
Nie jestem prawnikiem, ale sâdzë, ûe wykorzystywanie TimeMastera
nie jest niezgodne z prawem. Nie narusza bowiem integralnoôci samego
programu. Jedynâ rzeczâ którâ robi TimeMaster jest podwieszanie sië pod
wektory systemu operacyjnego, a jest to jak najbardziej legalne. Co do
problemów moralnych - majâ one zazwyczaj priorytet niûszy od
finansowych, ale jeûeli skonfigurowaîeô sobie ûycie inaczej (..musiaîo
Cië na to staê..), to masz niezbywalne prawo niekorzystania z tego
programu. Moûesz dodatkowo czuê wyûszoôê moralnâ nad jego autorem.
Wymagania:
- system 3.0 (V39)
- biblioteka patch.library V4
System 3.0, poniewaû program uûywa funcji CreatePool etc. Dziëki
temu system nie jest zwalniany przez normalne funkcje pamiëciowe
za kaûdym razem, gdy trzeba coô zapamiëtaê podczas operacji
OpenDevice(), CloseDevice() i BeginIO().
Biblioteka patch.libarary, gdyû zapewnia proste instalowanie i
USUWANIE procedur patchujâcych.
Przejdúmy do konkretów. Wszelkie pomiary czasu na Amidze
dokonywane przez kulturalne programy odbywajâ sië za pomocâ timer.device
(BARDZO niewiele korzysta bezpoôrednio z hardware), z wykorzystaniem
komendy TR_ADDREQUEST. Takimi wîaônie programami moûe zajmowaê sië
TimeMaster (no cóû, niektóre robiâ to za pomocâ innych komend, ale one
zasîugujâ na to, aby ich nie oszukiwaê :-). Wszystko natomiast, co on
robi, to podmienienie wartoôci czasu w IORequest (a wîaôciwie
TimeRequest) wysyîanym do timer.device.
Uruchomienie:
Run <>NIL: TimeMaster <taskfile>
lub z Workbencha.
Jeûeli zostanie on uruchomiony bez ûadnego parametru, listë
tasków do ogîupienia odczyta z pliku 'S:TimeMaster.tasks'. Jeûeli
zostanie podany jakiô argument, bëdzie on potraktowany jako nazwa pliku,
z którego naleûy wczytaê listë tasków.
We wspomnianym wyûej pliku kaûdemu taskowi przysîuguje jedna
linijka. Wyglâda to np. tak:
PatchRun1
co mówi TimeMasterowi, ûe we WSZYSTKIE odwoîania tego programu naleûy
przedîuûyê. W wypadku wspomnianego wyûej programu moûna tak postâpiê,
poniewaû proôba o opóúnienie jest najprawdopodobniej jedynym odwoîaniem
do timer.device.
Nieco inaczej sprawa ma sië z urzâdzeniami (devices). Bardzo
czësto uûywajâ one bowiem timer.device do opóúnieï zwiâzanych ze
sprzëtem (np. rozpëdzenie sië gîowicy magnetofonu). Poniewaû jednak
muszâ one byê dokîadne, uûywajâ raczej innego unita co do opóúnienia
kilkunastominutowego (UNIT_VBLANK=1, o rozdzielczoôci 1/50 sekundy), a
innego do bardziej dokîadnych (UNIT_MICROHZ, UNIT_ECLOCK). TimeMaster
zezwala na podanie konkretnego unita, którego IORequesty ma podmieniaê
(patrz Uwaga3!):
mk232p.device 1
W przypadku, gdyby jednak program uûywaî UNIT_VBLANK takûe do
innych celów niû nasze opóúnienie (np. wîâczanie i wyîâczanie pralki co
5 minut - do tego celu wystarczy dokîadnoôê VBlank), argumentem który
takûe moûesz podaê, jest wartoôê czasowa podana w sekundach, którâ
naleûy zastâpiê przez $FFFFFFFF lub innâ wartoôê (patrz dalej - w tym
przypadku 900 - 15 minut):
PowerFrania 1 900
W wyborze odpowiedniej wartoôci do podmiany moûe pomóc DevMon.
A gdyby uûyê TimeMastera do przedîuûania czasu prania? Po czasie
'do podmienienia' naleûy podaê czas 'do wstawienia' (takûe dziesiëtnie!):
PowerFrania 1 3600 7200
a wiëc zmieniliômy czas z jednej godziny na dwie.
Jeûeli chcesz wstawiaê konkretny czas zamiast wszystkich
proponowanych przez ogîupiany program, naleûy wstawiê zero w czasie 'do
podmiany':
random.device 1 0 1800
Plik moûe wiëc wyglâdaê tak:
' <- tego w pilku nie ma byê!
mk232p.device 1
PatchRun1
PowerFrania 1 900
random.device 1 0 1800
ramlib 1
' <- tego w pilku nie ma byê!
Co znaczy 'ramlib 1'? Patrz na Uwagë nr 3!
UWAGA1: Uwaûaj na nazwë taska!
- najlepiej uruchom program tak, jak go zazwyczaj bëdziesz uruchamiaî i
wtedy sprawdú jego nazwë (np. programem ARTM). W zaleûnoôci od tego, czy
uruchomiîeô go w User-Startup'ie, WBStartup'ie czy jeszcze inaczej, moûe
ona wyglâdaê inaczej. Np. jeûeli uruchamiasz program poprzez jego
argument, którego ikona ma wpisane w polu Default Tooltype
'Work:MojeHobby/PowerFrania', to to bëdzie nazwâ taska, a nie
'PowerFrania'!!!. Jeûeli wiesz jak, moûesz uûyê programu DevMon.
- sprawdú wtedy pisownië maîych/duûych liter!. TimeMaster jest
programikiem w asemblerze, i nie chciaîo mi sië pisaê procedur
porównujâcych case-insensitive, poza tym porównywanie zabraîoby wiëcej
czasu (nie mówiâc juû o uûyciu funkcji utility.library!).
UWAGA2: Uwaûaj na plik z taskami!
- z powodów wspomnianych wyûej (lenistwo, nie prëdkoôê :-), odczyt
pliku nie jest w ogóle idiotoodporny. Linia musi zaczynaê sië od nazwy
taska, potem ewentualnie po JEDNEJ spacji numerek unita, potem
ewentualnie po JEDNEJ spacji wartoôê czasu do podmiany i znów
ewentualnie po JEDNEJ spacji wartoôê czasu do wstawienia. Bez komentarzy
etc. Sorry, no bonus.
UWAGA3: 'ramlib <unit>' jako dodatkowy task
W przypadku programów procedura patchowania wyglâda tak:
- Podczas otwarcia timer.device Time Master sprawdza jaki to task i
porównuje do listy tasków w pamiëci. Nastëpnie sprawdza unit, i jeûeli
wszystko sië zgadza zapamiëtuje adres IORequesta (a wîaôciwie
TimeRequesta).
- Podczas odwoîania do funkcji BeginIO timer.device program sprawdza,
czy podany request to 'jeden z naszych' i, jeôli tak, to po ewentualnym
sprawdzeniu wartoôci do podmiany, wstawia zamiast kilkunastu minut lata
ôwietlne (np, prawie) lub podanâ przez uûytkownika wartoôê.
- Podczas zamykania timer.device, TimeMaster sprawdza IORequest i
ewentualnie usuwa go z listy requestów do podmiany.
Z device'ami jest nieco inaczej. Timer.device jest bowiem
otwierany nie przez nie, a przez task ramlib. One 'tylko' wykonujâ
OpenDevice(). TimeMaster musi wiëc zapamiëtaê wszystkie requesty uûywane
przez ramlib podczas otwarcia timer.device i potem podczas OpenDevice()
sprawdziê, czy wykorzystuje go jeden z naszych tasków. Jeûeli tak, to go
zapamiëtuje i podmienia.
Dlatego konieczny jest wpis ramlib, który wîaônie decyduje o
zapamiëtywaniu requestów ramliba 'dokonanych' na jednostce <unit>.
Uwaga: Z powyûszych wzglëdów, unit podany przy ramlibie odnosi
sië do wszystkich device'ów, a ewentualne unity po nazwie device'a sâ
ignorowane (aczkolwiek jeôli chcesz podaê konkretnâ wartoôê czasu,
musisz podaê jakiô numerek jako unit!).
Tak wiëc wybieranie unita ma w zasadzie sens tylko przy
patchowaniu tasków (zakîadajâc, ûe w ogóle ma sens, skoro i tak
najczëôciej uûywany jest VBlank=1)
Podany przy ramlibie czas jest ignorowany.
UWAGA4: Device'y po raz kolejny
Uwaûaj, bowiem nie wszystkie device'y uûywajâ UNIT_VBLANK tylko
do opóúnienia wersji demo. Konieczne jest wiëc podanie konkretnego czasu
do podmiany. Podmiana wszystkich requestów takiego urzâdzenia moûe
uczyniê je w najlepszym wypadku niefunkcjonalnym, w najgorszym moûesz
oczekiwaê Guru i uszkodzeï danych (zaleûnie od urzâdzenia)! You have
been warned.
W pliku moûe znajdowaê sië nieograniczona iloôê linii z taskami.
Jeûeli plik jest pusty lub pierwszy znak pliku to newline (10), to
TimeMaster natychmiast wychodzi z siebie.
Raz uruchomionego TimeMastera moûesz zatrzymaê poprzez wysîanie
mu Ctrl-C. Patch'e funkcji zostanâ usuniëte, pamiëê zwolniona.
Jeûeli uruchomisz TimeMastera gdy jedna jego kopia juû patchuje
system, nic sië nie stanie - program natychmiast wyjdzie z siebie.
TimeMastera moûesz usunâê po tym, jak zostaîy uruchomione
wszystkie ogîupiane programy (znaczenie ma tylko podmiana podczas
BeginIO, zazwyczaj na poczâtku wykonywania programu), ale nie bëdâ one
patchowane podczas nastëpnego uruchomienia.
Autor nie bierze ÛADNEJ odpowiedzialnoôci za dziaîanie lub
nie dziaîanie programu. Jego nieodpowiednia obsîuga moûe (ba, bëdzie)
prowadziê do Guru Meditation. Jego odpowiednia obsîuga moûe nic nie daê,
jako ûe program NIE zostaî dokîadnie przetestowany.
PS. Ostatnio skopaî mi sië kod úródîowy.. Moûe jeszcze go gdzieô
znajdë, na razie archiwum jest bez niego..
Copyright 1996 by Tadek Knapik, Public Domain.
Sorry folks.